home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / packet / n17jsrc / getline.c < prev    next >
C/C++ Source or Header  |  1991-01-22  |  2KB  |  80 lines

  1. /* getline.c version 1.0 PA0GRI */
  2. #include <stdio.h>
  3. #include <ctype.h>
  4. #include "global.h"
  5.  
  6. /*
  7.  *    getline() 
  8.  *    to read a line from a domain file and return a usefull line
  9.  *    completely assembled (if multy line)
  10.  *    It skips any connent lines. It follows rfc 1133 , 1134 , 1135 , 1136.
  11.  */
  12. char *
  13. getline(fp)
  14. FILE *fp;
  15. {
  16.     char *line;
  17.     char *contline;
  18.     char *chrptr1;
  19.     char *chrptr2;
  20.     int s1,s2;
  21.     int loop = 1;
  22.  
  23.     if(fp == NULLFILE)
  24.         return NULLCHAR;    /* just in case */
  25.     line = mallocw(256);        /* get buffer space */
  26.     while(loop){
  27.         if(fgets(line,256,fp) == NULL){
  28.             free(line);
  29.             return NULLCHAR;
  30.         }
  31.         if(line[0] == '#' || line[0] == ';')
  32.             continue;    /* skip comment lines */
  33.         if((s1 = strlen(line)) < 2)
  34.             continue;    /* empty line */
  35.         loop = 0;        /* none of above */
  36.     }
  37.     line[s1-1] = '\0';        /* kill nl */
  38.     if((chrptr1 = strchr(line,';')) != NULLCHAR){
  39.         *chrptr1 = '\0';    /* eliminate comment */
  40.         s1 = strlen(line);    /* recompute line size */
  41.     }
  42.     if((chrptr1 = strchr(line,'(')) != NULLCHAR){ /* continuation */
  43.         *chrptr1 = ' ';            /* replace with space */
  44.         if((chrptr2 = strchr(line,')')) != NULLCHAR){ /* continuation */
  45.             *chrptr2 = ' ';        /* replace with space */
  46.             return line;        /* complete line */
  47.         }
  48.         loop = 1;
  49.     }
  50.     contline = mallocw(256);    /* get buffer space */
  51.     while(loop){
  52.         if(fgets(contline,256,fp) == NULL){
  53.             free(line);
  54.             free(contline);
  55.             return NULLCHAR;
  56.         }
  57.         s2 = strlen(contline);
  58.         contline[s2-1] = '\0';    /* kill nl */
  59.         if(line[0] == '#' || line[0] == ';')
  60.             continue;    /* skip comment lines */
  61.         if((s1 = strlen(line)) < 2)
  62.             continue;    /* empty line */
  63.         if((chrptr1 = strchr(contline,';')) != NULLCHAR){
  64.             *chrptr1 = '\0';    /* eliminate comment */
  65.             s2 = strlen(contline);    /* recompute line size */
  66.         }
  67.         chrptr1 = mallocw(s1+s2+2);
  68.         sprintf(chrptr1,"%s %s",line,contline);
  69.         free(line);
  70.         line = chrptr1;
  71.         if((chrptr2 = strchr(line,')')) != NULLCHAR){ /* continuation */
  72.             *chrptr2 = ' ';        /* replace with space */
  73.             loop = 0;
  74.         }
  75.  
  76.     }
  77.     free(contline);
  78.     return line;
  79. }
  80.